package com.dc.designPattern._8_composite.impl;

import lombok.Data;

/**
 * Description: 组合模式_抽象组件,机构抽象
 *
 *  Component :这是组合中对象声明接口，在适当情况下，实现所有类共有的接口默认行为,用于访问和管理 Component 子部件, Component 可以是抽象类或者接口
 *
 * @author: gdc
 * @date: 2021/3/14
 * @version 1.0
 */
@Data
public abstract class OrganizationComponent {

    /**
     * 名字
     */
    private String name;
    /**
     * 说明
     */
    private String desc;

    public OrganizationComponent(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    /**
     * add 方法，提供默认实现
     * @param origanizationComponent            组织组件信息
     */
    protected void add(OrganizationComponent origanizationComponent){
        throw new UnsupportedOperationException();
    }

    /**
     * remove 方法，提供默认实现
     * @param origanizationComponent            组织组件信息
     */
    protected void remove(OrganizationComponent origanizationComponent) {
        throw new UnsupportedOperationException();
    }

    /**
     * 打印方法，需要子类实现
     */
    protected abstract void print();
}
